home *** CD-ROM | disk | FTP | other *** search
/ Aminet 1 (Walnut Creek) / Aminet - June 1993 [Walnut Creek].iso / aminet / text / tex / tex3141source.lha / tex3141 / README < prev    next >
Text File  |  1993-02-23  |  13KB  |  307 lines

  1. This file describes web2c, a system which converts TeX, Metafont, and
  2. other products of the Stanford TeX project to C.  (It is definitely not
  3. a general-purpose Pascal-to-C translator.)
  4.  
  5. web2c is primarily the product of Tim Morgan <morgan@ics.uci.edu>.
  6. Tomas Rokicki wrote the original TeX to C program.  Pierre Mackay
  7. <mackay@cs.washington.edu> wrote the original change files for most
  8. of the Metafontware programs.  Karl Berry <karl@cs.umb.edu> made everything
  9. work with the new ``8-bit'' release, and is probably to blame for things
  10. that don't work now, but used to.  And over a hundred more people
  11. have contributed in other ways.
  12.  
  13. The file ./MACHINES contains a list of known configurations that have
  14. passed the trip and trap test.  If your configuration is not on this
  15. list, you should build triptex and trapmf (instructions below), and then
  16. send mail to Karl with the vital statistics, and, of course, any changes
  17. you made, preferably in the form of context diffs.
  18.  
  19. The file ./ChangeLog records changes to web2c.  The current version number
  20. of web2c can be found at the beginning of that file.
  21.  
  22. The file ./PROJECTS describes some improvements to the current setup
  23. that would be nice to have.
  24.  
  25. The file ./PROBLEMS describes various difficulties people have
  26. encountered.  If you have trouble getting the distribution up, look here
  27. first.
  28.  
  29. We try to keep web2c up-to-date with respect to the master versions of
  30. the WEB files.  But we can't, always.  The web-*.tar.Z file holds the
  31. versions that we know to work with these change files.  If you get
  32. different versions and encounter any problems, please write to us.
  33.  
  34. Here is a table of contents for the rest of this file:
  35.    Bootstrapping tangle
  36.    Installation
  37.    Changing constants
  38.    Format files and preloading
  39.    Online output from Metafont
  40.    Portability
  41.  
  42.  
  43.  
  44. Bootstrapping tangle
  45. %%%%%%%%%%%%%%%%%%%%
  46. If you have an already working tangle, you need do nothing special.  If
  47. you don't, the Makefile in the subdirectory web will attempt to compile
  48. a bootstrap version.  This step can fail and go into a loop.  If this
  49. happens you need to fix the problem manually.  Possible problems and
  50. remedies:
  51.  
  52. If tangle fails tangling tangle.web:
  53.     tangle.ch may not match tangle.web; get the correct versions.
  54.  
  55. If tangleboot.c or tanglext.c does not compile:
  56.     Make the converted C files acceptable to your compiler and retry
  57.         (also tell Karl, so web2c can be fixed).
  58.  
  59. Your shell cannot find tangle, current directory not in search path:
  60.     Add . to search path or edit web/Makefile to invoke
  61.     ./tangle on tangle.web.
  62.  
  63.  
  64.  
  65. Installation
  66. %%%%%%%%%%%%
  67. Here is the procedure for getting things running.
  68.  
  69. 1. Edit ./site.h and ./Makefile to set up your local paths, compiler, etc.
  70.    The symbols BSD and SYSV affect the conversion from WEB to C, not
  71.    just the compilation of the C files.  Therefore, you must recompile
  72.    web2c if you change the definition of these symbols.  (The Makefile 
  73.    does that automatically if you change site.h, but you should be aware
  74.    of this, anyway.)  If you move ./site.h to another directory (i.e.,
  75.    change SITEDIR in Makefile), move ./defaults.h there, also.
  76. 2. `make triptrap' to build triptex and trapmf (and some of the other 
  77.    programs that are needed to run the tests).
  78. 3. `make run-triptrap' to run the tests.  The differences (and many
  79.    error messages) will show up on your terminal.  If you have a
  80.    question about whether the differences are OK or not, consult the
  81.    trip/trap manuals.
  82. 4. `make clean-triptrap' to get rid of those programs and output.  You
  83.    need to do this before making the working versions.
  84. 5. `make' to make the working versions of every program in this
  85.    hierarchy.  If you wish to make a `big' TeX or Metafont, now is the
  86.    time to set up for it.  See below.
  87. 6. cd into `tex' and make the format files you want.  If you don't know
  88.    what this means, see the section `Format files and preloading' below.
  89. 7. cd into `mf' and make the base files you want.  It is also a good
  90.    idea to try to draw something online (if you intend to support that)
  91.    before installing Metafont, as this often fails to work right on the
  92.    first try.  See the `Running Metafont' chapter in the Metafontbook.
  93. 8. TeX uses the name it was invoked as the name of the format file to
  94.    read.  Therefore, you have set up links in two places:
  95.    (1) In the binary directory, links to virtex named `latex', `slitex',
  96.        `texinfo', or whatever versions of TeX you are going to provide.
  97.    (2) In the format directory, a link to plain.fmt named `tex.fmt',
  98.        and, if you like, a link to lplain.fmt named `latex.fmt', etc.
  99.        The important thing is that a .fmt file with the same name as the
  100.        binary exists.
  101.    This goes for Metafont, too.
  102. 9. `make install' to do the obvious.  texware/pooltype and
  103.    texware/patgen are not installed by default, since most sites would
  104.    never want to run them.
  105. 10. `make clean' if you intend to compile the programs on another
  106.    architecture.  Since the .c files are intended to be portable across
  107.    architectures, they are not removed by this.
  108. 11. `make veryclean' when you're all done.  This removes everything that
  109.    was not in the original distribution (and more besides).
  110.  
  111. If you wish to make just TeX or Metafont, the top-level Makefile has
  112. targets named `TeX' and `MF' which make {ini,vir}{tex,mf}, and nothing
  113. else.
  114.  
  115. web2c.yacc has one shift/reduce conflict, so expect that message.
  116.  
  117. Ordinarily, you don't need to ever `make' anything in subdirectories,
  118. but only from the top-level directory.  If you ever do run `make' in a
  119. subdirectory, you should be aware that they all define their own CC,
  120. OPT, etc. -- and so you will probably want to change them.
  121.  
  122. You will also need the latest plain.tex, plain.mf, and other macro
  123. files.  You can get them from labrea.stanford.edu, in the directory
  124. tex/lib.  LaTeX's lplain.tex and splain.tex have not yet been updated. 
  125. For them, you should create a small file lplain3.tex (or whatever):
  126.  
  127. \lefthyphenmin = 2
  128. \righthyphenmin = 3
  129. \input lplain
  130.  
  131. to run initex on, so that LaTeX users do not get weird hyphenations.
  132.  
  133.  
  134.  
  135. Changing constants
  136. %%%%%%%%%%%%%%%%%%
  137. The files tex/bigtex.diff and mf/bigmf.diff contain patches to build
  138. versions of TeX and Metafont with much more memory, pool space, etc.
  139. You should apply the patches before beginning to compile the programs.
  140. The 32-bit TeX that results (all of this goes for Metafont, too) will
  141. have a smaller text segment and run faster, because it doesn't have to
  142. convert frequently between 16-bit and 32-bit integers.  It is therefore
  143. a good idea to build such a TeX if possible.
  144.  
  145. You should also change the type |glue_ratio| in site.h from |float| to
  146. |double| if you do this.
  147.  
  148. You can obtain the patch program (written by Larry Wall
  149. <lwall@jpl-devvax.jpl.nasa.gov>) from a comp.sources.unix archive, or by
  150. ftp from his machine.
  151.  
  152. You should first save the original c{tex,mf}.ch as ctex16.ch or some
  153. such, because `make veryclean' removes files whose names end in ~, etc.,
  154. which could wipe out the originals.
  155. Then apply the patches by saying, e.g.,
  156. % cd tex; patch < bigtex.diff
  157.  
  158.  
  159.  
  160. Format files and preloading
  161. %%%%%%%%%%%%%%%%%%%%%%%%%%%
  162. TeX (and Metafont; I'll talk about TeX, but MF is completely analogous)
  163. can write its memory to a file; such a file is called a ``format file''.
  164. Why is this interesting?  Because TeX can read a format file much faster
  165. than the source file that gave rise to it.
  166.  
  167. To create a format file, you give the command `\dump' to initex after
  168. reading the source file.  (This is more or less the whole raison d'etre
  169. for initex.)  For example:
  170. % initex
  171. This is TeX, C Version 3.0
  172. **plain \dump
  173. <blurbs>
  174. Starting to dump on file plain.fmt
  175. <more blurbs>
  176.  
  177. Voila, you have a plain.fmt you can install somewhere with `make
  178. install' (or whatever).
  179.  
  180. Unlike all the other files in the TeX world, format files are not
  181. portable across architectures.
  182.  
  183. Well, I said Metafont is completely analogous, but you actually need to
  184. do a little more: create a file that defines your local output devices
  185. (i.e., ``mode_defs'').  The conventional name for this file is
  186. <site>.mf, e.g., I called mine UMB.mf (University of Massachusetts at
  187. Boston).  You can get sample definitions from the file waits.mf that
  188. should be with all the standard Metafont input files.  If your device
  189. isn't listed there, you can write to the TeX Users Group (of which you
  190. should consider becoming a member, anyway) <tug@math.ams.com>.  You can
  191. also experiment yourself with the parameters; what goes into a mode_def
  192. is not particularly mysterious, and it is all described in the
  193. Metafontbook.
  194.  
  195. Once you've gotten your site.mf file, you say something like the
  196. following:
  197. % inimf
  198. This is METAFONT, C Version 2.0
  199. **plain
  200. <blurbs>
  201. *input site
  202. <blurbs>
  203. *dump
  204. <final blurbs>
  205.  
  206. and you should have .base file, analogous to TeX's .fmt file.
  207.  
  208. TeX uses the name it was invoked with to figure out what format file to
  209. read.  Therefore, for each format file, you should create a link to the
  210. virtex executable named the name of the format file.  For example:
  211.  
  212. % cd $(bindir)
  213. % ln virtex tex
  214. % ln virtex latex
  215. % ln virtex texinfo
  216.  
  217. Then, when you run, say,
  218. % texinfo
  219. TeX looks for a format file named `texinfo.fmt'.
  220. All of this goes for Metafont, too, as usual.
  221.  
  222. One more thing about format (and base) files: It is possible to
  223. ``preload'' TeX, i.e., avoid reading the .fmt file at runtime.  However,
  224. on most modern machines, you don't gain a lot of startup time, and you
  225. lose a lot of disk space.  Furthermore, different flavors of TeX will
  226. not have their code segments shared.  Therefore, it is probably best not
  227. to preload, unless, of course, you try that and the response is
  228. horrible.
  229.  
  230. Here is some data collected by Ken Yap <ken@cs.rochester.edu> on a
  231. Sun 3/60 running Sun Unix 3.4 on preloaded vs. non-preloaded, and also
  232. 16-bit vs. 32-bit.
  233.  
  234.     16 bit, unloaded:  42.1u 1.4s 0:50 86% 10+29k 72+17io 0pf+0w
  235.     16 bit, preloaded: 41.7u 0.9s 0:46 90% 10+27k 4+17io 80pf+0w
  236.     32 bit, unloaded:  42.4u 1.7s 0:47 92% 10+52k 95+17io 0pf+0w
  237.     32 bit, preloaded: 41.6u 1.2s 0:48 88% 10+47k 5+17io 102pf+0w
  238.  
  239.     It is interesting that i/o is traded off with page faulting, as is to
  240.     be expected. Also 32 bit unloaded runs slightly faster than 16 bit
  241.     unloaded, in spite of more i/o.
  242.  
  243.     Sizes:
  244.     text    data    bss     dec     hex
  245.     180224  16384   587868  784476  bf85c   virtex (16 bit)
  246.     180224  630784  0       811008  c6000   latex (32 bit)
  247.     172032  16384   3110692 3299108 325724  virtex (32 bit)
  248.     172032  3153920 0       3325952 32c000  latex (32 bit)
  249.  
  250.     File sizes:
  251.     -rwxr-xr-x  1 ken        196608 Jun 29 15:57 virtex (16 bit)
  252.     -rwxr-xr-x  1 ken        811008 Jun 29 15:58 latex (32 bit)
  253.     -rwxr-xr-x  1 ken        188416 Jun 29 15:34 virtex (32 bit)
  254.     -rwxr-xr-x  1 ken       3325952 Jun 29 15:36 latex (32 bit)
  255.  
  256.  
  257.  
  258. Online output from Metafont
  259. %%%%%%%%%%%%%%%%%%%%%%%%%%%%
  260. Metafont in C can be compiled to support multiple window systems. 
  261. You say which you want via definitions in site.h.  You also have to say
  262. which system libraries should be linked into the library in the
  263. top-level Makefile.
  264.  
  265. There are two versions of the X11 support in mf/MFwindow.  One is based
  266. on Xt, one on Xlib.  The Xt version is faster and has more
  267. functionality, so if it works on your system, you should use it.  It is
  268. the default.  But if it fails, you can try the Xlib version.
  269.  
  270. Defining more devices is fairly straightforward.  A file should be put
  271. in mf/MFwindow to support the actual interface routines, all of which
  272. are described in the Metafont source.  Then you need to add another
  273. entry to the tables in mf/extra.c; that should be it.
  274.  
  275.  
  276.  
  277. Portability
  278. %%%%%%%%%%%
  279. The C code generated by the web2c translator is intended to be as
  280. portable as possible (for any given set of definitions in site.h).  If
  281. you find bugs or portability programs with the generated code, report
  282. them to Tim.
  283.  
  284. The generated code assumes that the type |short| has at least the range
  285. -32768..32767, and that |unsigned short| has at least the range
  286. 0..65535.  If this isn't the case, the translator will have to be
  287. modified.
  288.  
  289. Also, if you change the type of |integer| in site.h to something other
  290. than |long|, you will have to modify web2c/fixwrites.c, since it
  291. generates code to integer output using "%ld", and casts all integral
  292. values to be printed to |long|.
  293.  
  294. The file tex/extra.c contains the routines `clearterminal' and
  295. `wakeupterminal' written for machines running BSD.  If you're not on
  296. such a machine, you may wish to write your own version of the routines
  297. (and please send them to Karl or Tim).
  298.  
  299. On another front, various of the `convert' scripts assume some basic
  300. Unix utilities: basename, cat, cp, diff, ln, make, mv, rm, sed, and
  301. touch.  The Bourne shell is also assumed.  If your system versions are
  302. broken, you can try the GNU versions, available from prep.ai.mit.edu in
  303. pub/gnu, among other places.  The GNU C compiler is also better (more
  304. reliable, faster, and produces better code) than many other C compilers,
  305. so you might want to get that.  For more information about the GNU
  306. project, write to gnu@prep.ai.mit.edu.
  307.